Ext.onReady(function() {
	//角色数据
	var storerol = Ext.create('Ext.data.Store', {
				fields : ['rid', 'rname', 'remark'],
				proxy : {
					type : 'ajax',
					url : 'getAllRole.do',
					reader : {
						type : 'json'
					}
				}
			});
	storerol.load();
	var selModel = Ext.create('Ext.selection.CheckboxModel', {
				injectChectbox : 'first',
				mode : 'single',// multi,simple,single 默认为多选multi
				checkOnly : false,// 如果为true，则只用点击checkbox列才能选中此条记录
				allowDeselect : true,// 如果为true，并且mode值为单选（single）时，可以通过点击checkbox取消对其的选择
				enableKeyNav : true
			});
	// 角色面板
	var gridrole = Ext.create('Ext.grid.Panel', {
				title : '角色',
				width : 200,
				region : 'west',
				store : storerol,
				selModel : selModel,
				columnLines : true,
				columns : [{
							header : 'ID',
							dataIndex : 'rid',
							hidden : true
						}, {
							header : '角色名称',
							dataIndex : 'rname'
						}, {
							header : '说明',
							dataIndex : 'remark'
						}],
				listeners : {
					// 当选中一个角色记录的时候
					select : function(model, record, index, opts) {
						//先清除权限面板的选中效果
						var rotns = gridreso.getRootNode().childNodes;
						clearchecked(rotns);
						var rid = record.get('rid');
						// 查询角色对应的权限，然后赋给右边的权限列表
						Ext.Ajax.request({
									url : 'getTResByrid.do',
									params : {
										// 传角色ID
										rolid : rid
									},
									success : function(response) {
										//把后台传来的数据解析成对象
										var res = Ext.decode(response.responseText);
										var nodes = gridreso.getRootNode().childNodes;
										//递归方法给对应节点赋值
										findchildnodes(nodes, res);
									}
								});
					}
				}
			});
	//权限资源数据
	var storeres = Ext.create('Ext.data.TreeStore', {
				proxy : {
					type : 'ajax',
					url : 'getRightBox.do'
				},
				root : {
					expanded : true,
					text : '系统菜单'
				}
			});
	// 权限面板
	var gridreso = Ext.create('Ext.tree.Panel', {
				title : '权限',
				region : 'center',
				store : storeres,
				rootVisible : true,
				multiSelect : true,
				bbar : [{
							xtype : 'button',
							text : '确定',
							iconCls : 'button-accept',
							handler : saveroleres
						}]
			});
	gridreso.on('checkchange', function(node, checked) {
				node.expand();
				node.checked = checked;
				var parentNode = node.parentNode;
				var rootnode = gridreso.getRootNode();
				if (parentNode != null && parentNode != rootnode) {
					parentNode.set('checked', checked);
				};// 选中父子节点就级联选中父节点
				node.eachChild(function(child) {
							child.set('checked', checked);
							child.fireEvent('checkchange', child, checked);
						});// 选中父节点级联选中子节点
			}, gridreso);
	// 总面板
	Ext.create('Ext.Viewport', {
				title : '总面板',
				layout : 'border',
				renderTo : Ext.getBody(),
				items : [gridrole, gridreso]
			});
	function saveroleres() {
		var node = gridreso.getRootNode();
		node.set('checked', false);
		if (gridrole.getSelectionModel().getSelection() == 0) {
			alert("请选择角色");
		} else {
			// var rolid=gridrole.getSelectionModel().getSelection()[0];
			var rolid = gridrole.getSelectionModel().getSelection()[0].data.rid;// 由于设定为单选所以，取选定的第一个记录的数据的角色ID
			var resids = "";
			var records = gridreso.getChecked();// 获取treePanel 所有选中的记录
			for (var i = 0; i < records.length; i++) {
				resids += records[i].data.id + ",";
			}
			// 取出id后往后台传值保存数据库
			Ext.Ajax.request({
						url : 'saverolres.do',
						params : {
							rid : rolid,
							resids : resids
						},
						success : function(response) {
							var text = response.responseText;
							alert(text);
						}
					});
		}
	}
});

function findchildnodes(nodes, res) {
	// 遍历所有的子节点
	for (var i = 0; i < nodes.length; i++) {
		//拿每个子节点的text跟角色对应的某个text比较
		for (var j = 0; j < res.length; j++) {
			if (nodes[i].data.text == res[j].text) {
				nodes[i].set('checked', true);//设定选中
			}
		}
		var rootnode = nodes[i].childNodes;
		//如果有子节点则递归调用
		if (rootnode.length > 0) {
			findchildnodes(rootnode, res);
		}
	}
}
function clearchecked(rotns){
	for(var i = 0;i < rotns.length;i++){
		rotns[i].set('checked', false);
		var rootnode = rotns[i].childNodes;
		//如果有子节点则递归调用
		if (rootnode.length > 0) {
			clearchecked(rootnode);
		}
	}
}